Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pager (stronicowanie), klasa, php4 i php5
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




info
pobierz

Hejka, prezentuję klasę Pager. Umożliwia ona wygenerowanie pager'a oraz pobranie aktualnych indexów rekordów.

Użycie jest proste:

  1. <?php
  2.    $pager = new Pager('idPagera');
  3.    //okreslenie liczby wszystkich rekordów na 500
  4.    $pager->SetTotalRecords(500);
  5.    echo $pager->Render();//wyswietlenie pagera
  6. ?>


Polączenie pagera z pobieraniem rekordów z bazy:
  1. <?php
  2.    $sql = 'select count(*) from TABLE';
  3.    $result = mysql_query($sql);
  4.    $row = mysql_fetch_array($result);
  5.    $recordsCount = $row[0];//pobranie liczby rekordów
  6.    $pager = new Pager('idPagera');
  7.    $pager->SetTotalRecords($recordsCount);//ustawienie liczby rekordów
  8.    //wygenerowanie pagera i zapamietanie go w zmiennej w celu
  9.    //pozniejszego wyswietlenia
  10.    $renderPager = $pager->Render();
  11.    $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego
  12.    $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego
  13.    //zapytanie z uwzglenieniem stronicowania
  14.    $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  15.    //...pobranie wyników i ich wyswietlenie
  16.    echo $renderPager; //wyswietlenie pager'a
  17. ?>

(edit: te przyklady od wersji 2.5 troche inaczej beda wygladac. poprawne kody w paczce)

W podanym przykladzie brakuje oczywiscie sprawdzania, czy dane zapytanie wykonalo sie poprawnie itp. Nie podawałem tego jednak po to, by nie zaciemniać kodu.


Klasa generuje unikalne dla każdego pagera (poprzez idPager'a) zmienne, dzięki czemu na stronie może byc kilka pagerów do różnych tabel. Dodatkow, jesli korzystacie z sesji, klasa pamieta strony w sesji, dzięki czemu nie tracone są informacje o aktualnej stronie przy odwiedzaniu innych linków


Klasa ma 3 sposoby przechodzenia do kolejnych stron:
1) generuje własny wewnetrzny formularz i go submituje
Konstruktor tylko z pierwszym argumentem
2) korzysta z zewnetrznego formularza i musi byc w nim zawarta
Konstruktor z pierwszym i trzecim argumentem. Jako trzeci argument należy podać
idFormularza zawnętrznego
3) poprzez linki. Należy wówczas określić drugi parametr w konstruktorze, który będzie linkiem podstawowym. Do niego dodany będzie parametr odnosnie strony. Ten sposób generuje ogólne zmienne dla pagera, przez co lepiej żeby dla niego na stronie byl tylko jeden pager. Sposób ten może być wykorzystywany przy wyszukiwarkach.

To chyba wszystko. Wszelkiego rodzaju uwagi, sugestie bądź wynalezione błędy proszę zgłaszać. Wysłucham każdej (IMG:style_emoticons/default/smile.gif)

Aha, sposób implemetncji klasy dostosowany do php4. Klasa nie korzysta z żadnych dziwnych funkcji, więc można łatwo dostosować ją do php5. Należy tylko metody i zmienne deklarować w sposób odpowiedni dla php5.

Wszystkie metody i zmienne zaczynajace się na podkreslenie (_) oznaczają, iż są to metody i zmienne prywatne.

A oto przykladowy widok pager'a:
Cytat
|<  <<  <  21  22  23  24  25  26  27  28  29  30  z 200  >  >>  >|

oczywiscie wszystko to linki oprócz aktualnej strony.

Pager jest łatwo konfigurowalny. MOżecie sami okreslic liczbe rekordów na stronie, liczbę stron w pagerze itp.

A pozatym niech wam dobrze służy (IMG:style_emoticons/default/smile.gif)

edit (2006-04-03)
W związku z licznymi uwagami, by klasa nie generowala linkow co x, tylko pare linków przed stroną i parę linków po, wprowadzilem lekkie modyfikacje. Sposób uzywania klasy nie uległ zmianie (jest kompatybilna wstecz (IMG:style_emoticons/default/smile.gif) ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:
  1. <?php
  2. echo $pager->Render(true);
  3. ?>

Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób (IMG:style_emoticons/default/winksmiley.jpg)

edit (2006-06-13)
Dawno nic nie pisalem. Czas zmienic. A wiec jest wersja 2.0
Główne zmiany:
1) odejscie od przesylania pagera formularzem
2) zapisywanie Pagera do tablicy, z której mozna samemu wygenerowac kod html Pager'a
3) PLucie wyjatkami (IMG:style_emoticons/default/smile.gif)
4) no i obecna wersja jest pod php5. Niedlugo dorobie tez wersje pod php4.

Zapraszam do sciagania i testowania.
W paczce jest kilka przykaldow, min. jak nalezy doczepic generowanie wlasnego kodu html.

Jesli zrobicie swoja funkcje generujaca kod html i bedziecie chcieli sie nia podzielic, wyslijcie mi a ja upublikuje wersje demo z wasza funkcja i wygladem pagera.

edit: 2.0 jest juz i pod php4

edit (2006-08-22)
Wersja 2.01:
- dorobilem na szybko ten link. teraz w konstruktorze, jesli podamy drugi parametr i bedzie w nim ciag:
#PAGE# to link ten zostanie niezmieniony, czyli bedzie tak jak user podal, za wyjatkiem #PAGE#, ktore zostanie zamienione na numer strony
Czyli dla przykladu co podal AxZx powinno byc:
  1. <?php
  2. $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#');
  3. ?>


- metoda Render moze zwracac teraz tablicę pagera zamiast kodu html. Należy ustawic na true jej trzeci parametr

edit (2007-07-26)
Wersja 2.5. Więcej info tu: http://nospor.pl/pager-2.5.html
Go to the top of the page
+Quote Post
12 Stron V  « < 7 8 9 10 11 > »   
Start new topic
Odpowiedzi (160 - 179)
nieraczek
post
Post #161





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


O dzięki za info (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
pianta_d
post
Post #162





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

Ostrzeżenie: (0%)
-----


Witam

Mam problem z sortowaniem po dwóch kolumnach.
Mam kod
  1. <?php
  2. $pager = new EPager('id', null, false,$orders,array('typ_ogloszenia' => 'DESC', 'nazwa' => 'ASC'));
  3. ?>

jednak nie srotuje po dwóch kolumnach tylko po pierwszej czyli typ_ogloszenia.

Jak zrobić, aby sortowało po dwóch lub więcej wybranych kolumnach?


EDIT



Poradziłem sobie, dzieki

Ten post edytował pianta_d 6.07.2009, 09:18:40
Go to the top of the page
+Quote Post
hondek
post
Post #163





Grupa: Zarejestrowani
Postów: 355
Pomógł: 50
Dołączył: 20.08.2007
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Witam!
Mam taki problem z klasa Pager:
kiedy przechodze np. dalej ">" Pager dodaje mi do urla : ppidPager=<nr_strony>
i tak np. po kilku przejsciach mam takiego url'a:
http://localhost/index.php?menu=stats&ppidPagera=1&ppidPagera=2&ppidPagera=3&ppidPagera=4 ... itd..

Wie ktos moze czym to moze byc spowodowane?
Tak tworze obiekt klasy :

  1. <?php
  2. $res = mysql_query($que);
  3.    $recordsCount = mysql_num_rows($res);
  4.    try{
  5.        $pager = new Pager('idPagera');
  6.        $pager->RecordsPerPage = 10; // Ilość rekordow na strone
  7.        $pager->SetTotalRecords($recordsCount);
  8.        $pager->Make(true);
  9.        $pag = $pager->Render();
  10.        $start = $pager->GetIndexRecordStart();
  11.        $end = $pager->GetIndexRecordEnd();
  12.    }
  13.    catch (Exception $e) {
  14.        echo $e->getMessage();
  15.    }
  16. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #164





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




a jak wyswietlasz linki pagera? Sam cos jeszcze generujesz?
Go to the top of the page
+Quote Post
hondek
post
Post #165





Grupa: Zarejestrowani
Postów: 355
Pomógł: 50
Dołączył: 20.08.2007
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


nie, poprostu <?=$pag?>

jedyna rzecz jaka zmienilem w klasie to znak dolaczenia z '?' ma '&'

Ten post edytował hondek 15.07.2009, 15:50:21
Go to the top of the page
+Quote Post
nospor
post
Post #166





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
jedyna rzecz jaka zmienilem w klasie to znak dolaczenia z '?' ma '&'
no to zapewne to jest wlasnie przyczyna problemu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
tomall
post
Post #167





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 1.03.2009

Ostrzeżenie: (0%)
-----


Witam
Czytam i czytam i znaleźć nie mogę.
Jak wyciągnąć z pagera tablicę z linkami, zamiast stringa z gotowym formatowaniem.
Wszędzie jest napisane, że wystarczy na 3 parametr Render dać true. Jednakże mi to nie działa.
  1. $pag = $pager->Render('','',true);

Po takim ustawieniu nadal w zmiennej $pag mam gotowe sformatowane linki.
Używam Smarty i wygodniej było by tworzyć linki np. w taki sposób:
  1. {foreach item=link from=$links}
  2. <div class='klasa_linku'>{$link}</div>
  3. {/foreach}

Korzystam z rozszerzenia EPager.


pozdrawiam




Go to the top of the page
+Quote Post
nospor
post
Post #168





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Metoda Make() zwraca ci tablice. Czytaj komentarze przy funkcjach (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
limonides
post
Post #169





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 30.05.2009

Ostrzeżenie: (0%)
-----


a ja mam takie zapytanie

mam plik ciekawostki.php w nim zawarte jest wyświetlanie ciekawostek oraz dzielenie ich na strony za pomocą tego pagera.

na stronie głównej index.php mam warunek:

  1. elseif ($_GET['m'] == 'menu' && $_GET['id'] == '7') {
  2. include('ciekawostki.php');
  3. }


jak chce przejść do drugiej strony to przenosi mnie do strony głównej a link mam taki index.php?ppidPagera=2

jak zrobić aby zadział pager w momencie kiedy zdefiniowany jest on w innym pliku.
Go to the top of the page
+Quote Post
nospor
post
Post #170





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wszystko masz w komentarzach
Cytat
/**
* Konstruktor klasy
*
* @param string id - unikalne id pagera.
* @param string pageLink - adres, jaki będzie generowny do linków w pagerze
* Jeśli pageLink zawiera ciąg #PAGE#, oznaczać to będzie, iż link nie będzie modyfikowany przez klase, tylko
* będzie wyglądał jak zapodał użytkownik. Jedyne co zostanie podmienione to #PAGE# na numer strony.
* Jeśli pageLink będzie nullem, klasa wstawi parametr strony do linku uwzględniając przy tym wszystkie parametry jakie były w linku.

* @param mixed userGeneralParam - czy jako parametru strony używać parametru dla danego pagera, czy też ogólnego
* true - uzywać
* false - nie używać
* string - uzywać i ustawić taką nazwę parametru
* parametru określonego w $GeneralParamPageNumber
*/

czyli u Ciebie powinno np. byc
  1. $pager = new Pager('idPagera', null);
Go to the top of the page
+Quote Post
limonides
post
Post #171





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 30.05.2009

Ostrzeżenie: (0%)
-----


dzieki wielkieee
Go to the top of the page
+Quote Post
mwolodzko
post
Post #172





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.07.2010

Ostrzeżenie: (0%)
-----


Witam,
Mój problem polega na tym, że za cholery nie moge dodać do tego skryptu stronicowania.
Poniższy przyklad otwiera się w nowym okienku gdzie w postaci linków wyświatlane są rekordy pobrane z bazy, kliknięty tekst wpisuje się do formulaża w poprzednim okienku. Nie wiem jak dużo będzie rekordów wiec chciałbym dodać stronicowanie (i wyszukiwarke, ale to trochę później), ale za cholery nie wiem jak w tym przypadku to zrobić kombinowałem na sto milionów sposobów i nic, jak stronicowanie działa to nie działa wpisanie tekstu do formulaża i na odwrót. Jeżeli ktoś może mi pomóc bede bardzo wdzięczny.

Dzialanie skryptu pokazane jest pod adresem: http://vbch.nazwa.pl/iten/re1/visitas.php tam w formulażu przy polu "Tipo visita" jest link "(dodaj)" po kliknięciu ktorego otwiera się nowe okienko z pożiższym skryptem.



  1.  
  2. <?php
  3. $baza_host=("host");
  4. $baza_login=("login");
  5. $baza_haslo=("haslo");
  6. $baza_nazwa=("nazwa");
  7.  
  8. //Laczenie sie z baza mysql
  9. $polaczenie = mysql_connect($baza_host, $baza_login, $baza_haslo);
  10. $db = mysql_select_db($baza_nazwa);
  11.  
  12. $db_tables = array(
  13. 'iddetipovisita' => 'tipovisitas',
  14. 'jakas nazwa pola' => 'jakas nazwa tabeli' // itd.
  15. );
  16. ?>
  17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  18. <html xmlns="http://www.w3.org/1999/xhtml">
  19. <head>
  20. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  21. <title>AJAX suggest</title>
  22. <meta name="keywords" content="" />
  23. <meta name="description" content="" />
  24. <script src="http://code.jquery.com/jquery-latest.js"></script>
  25. <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
  26. </head>
  27. <body>
  28. <fieldset>
  29. <legend>Tipo visitas</legend>
  30. <input id="searchinput" type="text" name="search" value="" onkeyup="searchSuggest();" />
  31. <input id="searchsubmit" type="submit" value="Search" />
  32.  
  33. </fieldset>
  34. <script type="text/javascript">
  35. $(document).ready(function(){
  36. $('a').click(function(){
  37. v = $(this).html();
  38. $('input[name=<?php echo $_GET['id']; ?>]', opener.document).val(v);
  39. //window.close();
  40. });
  41. });
  42. </script>
  43. <ol>
  44.  
  45.  
  46. <?php
  47. $result = mysql_query('SELECT * FROM ' . $db_tables[$_GET['id']]);
  48. while($row = mysql_fetch_row($result))
  49. {
  50. echo '<li><a href="#">' . $row[1] . '</a></li>';
  51. }
  52. ?>


Ten post edytował mwolodzko 12.08.2010, 11:20:40
Go to the top of the page
+Quote Post
nospor
post
Post #173





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) Coś dużo choler ci się w tekst wcina.
2) I gdzie tu mój skrypt?
3) W paczce masz podane przykłady. W czym masz konkretnie problem?
Go to the top of the page
+Quote Post
mwolodzko
post
Post #174





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.07.2010

Ostrzeżenie: (0%)
-----


Konkretnie mój problem polega na tym, że trzeba dodać stronicowanie do tego skryptu, a nie bardzo wiem jak to zrobić, jak dodam stronicowanie to nie działa wpisywanie tekstu do formulaża i na odwrót tak jak pisałem w poprzednim poście.
Go to the top of the page
+Quote Post
nospor
post
Post #175





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to pokaż jak dodajesz.
Go to the top of the page
+Quote Post
mwolodzko
post
Post #176





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.07.2010

Ostrzeżenie: (0%)
-----


Np tak:

  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. $('a').click(function(){
  4. v = $(this).html();
  5. $('input[name=<?php echo $_GET['id']; ?>]', opener.document).val(v);
  6. //window.close();
  7. });
  8. });
  9. </script>
  10. <ol>
  11. <?php/*
  12. $result = mysql_query('SELECT * FROM tipovisitas');
  13. while($row = mysql_fetch_row($result))
  14. */?>
  15. <?
  16. function pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s) {
  17. $stron = ceil($rekordow/$na_stronie);
  18. if ($s<1) $s=1;
  19. if ($s>$stron) $s=$stron;
  20. $koniec = $s+$na_pasku;
  21. if ($s<=$na_pasku) $koniec = $na_pasku*2+1;
  22. if ($koniec>$stron) $koniec = $stron;
  23. $start = $koniec-$na_pasku*2;
  24. if ($start<1) $start=1;
  25. if ($s>1) $p = "<a href='$skrypt".($s-1)."'><<<</a>";
  26. else $p = "<span style='color:gray'><<<</span>";
  27. if ($s<$stron) $n = "<a href='$skrypt".($s+1)."'>>>></a>";
  28. else $n = "<span style='color:gray'>>>></span>";
  29. for ($i=$start; $i<=$koniec; $i++) {
  30. if ($i==$s) $l .= " <span style='color:#cc0000;'><b>$i</b></span> ";
  31. else $l .= "<a href='$skrypt$i'>$i</a>";
  32. }
  33. if ($rekordow<1) $wynik = "brak informacji spełniających kryteria wyszukiwania";
  34. else $wynik = "znalezionych: $rekordow, strona $s z $stron<br />";
  35. if ($stron>1) $wynik .= "$p - $l - $n";
  36. return $wynik;
  37. }
  38.  
  39. $s = ($_GET["s"]>1)?number_format($_GET["s"], 0, "", ""):1;
  40. $na_stronie = 5;
  41. $na_pasku = 5;
  42. $skrypt = "options.php?s=";
  43.  
  44. if (mysql_connect($sql_serwer, $sql_login, $sql_haslo)
  45. and mysql_select_db($sql_baza)) {
  46.  
  47. $start = ($s-1)*$na_stronie;
  48. $wynik = mysql_query("SELECT SQL_CALC_FOUND_ROWS *
  49. FROM tipovisitas LIMIT $start, $na_stronie
  50. ");
  51. $rekordow = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0);
  52.  
  53. $stron = ceil($rekordow/$na_stronie);
  54. if ($s>$stron and $rekordow>0) {
  55. $start = ($stron-1)*$na_stronie;
  56. $wynik = mysql_query("SELECT *
  57. FROM tipovisitas LIMIT $start, $na_stronie
  58. ");
  59. }
  60.  
  61. }
  62.  
  63. echo "<p style='text-align:center;'>";
  64. echo pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s);
  65. echo "</p>";
  66.  
  67. while($wynik and $dane = mysql_fetch_assoc($wynik)) {
  68. echo "<p>";
  69. foreach($dane as $pole) echo " [$pole] ";
  70. echo "</p>";
  71. }
  72. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #177





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Słuchaj... piszesz że masz problem z moim pagerem gdy go dodajesz do swojego kodu. Proszę cię wiec, byś mi podał kod, w którym dodajesz mój pager. A ty co? Podsyłasz mi jakiś zupełnie inny kod.

Jeśli więc nie masz problemu z moim pagerem to czemu zawracasz gitare akurat w tym temacie?
Go to the top of the page
+Quote Post
mwolodzko
post
Post #178





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.07.2010

Ostrzeżenie: (0%)
-----


Ok, mój błąd znalazłem temat w google tytul tematu jest: "Pager (stronicowanie), klasa, php4 i php5", więc jak miałem problem ze stronicowaniem, napisałem tutaj. Nie zauważyłem że to dział: "gotowe rozwiązania".
Go to the top of the page
+Quote Post
edwarpan
post
Post #179





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 28.04.2010

Ostrzeżenie: (0%)
-----


Coś mi nie działa.
  1. <?php
  2. require('config.php');
  3.  
  4.  
  5.  
  6. require_once('Pager.class.php');
  7. $sql = 'SELECT count(*) FROM newsy';
  8. $result = mysql_query($sql);
  9. $row = mysql_fetch_array($result);
  10. $recordsCount = $row[0];//pobranie liczby rekordów
  11. try{
  12. $pager = new Pager('idPagera');
  13. $pager->SetTotalRecords($recordsCount);
  14. $pager->Make(true);
  15. $pag = $pager->Render();
  16. $start = $pager->GetIndexRecordStart();
  17. $end = $pager->GetIndexRecordEnd();
  18. }
  19. catch (Exception $e) {
  20. echo $e->getMessage();
  21. }
  22.  
  23. //zapytanie z uwzglenieniem stronicowania
  24. $sql = 'SELECT * FROM newsy LIMIT '.$start.','.($end - $start + 1);
  25. //...pobranie wyników i ich wyswietlenie
  26.  
  27. echo $pag;//wyswietlenie pager'a
  28.  
  29. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #180





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Coś mi nie działa.
To coś napraw.....


Czy tak cięzko napisać czym objawia się to "niedziałanie"?

ps:
Cytat
//...pobranie wyników i ich wyswietlenie
Ale wstawiłeś wlasciwy kod w to miejsce?
Go to the top of the page
+Quote Post

12 Stron V  « < 7 8 9 10 11 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 22:36